9 隐 Markov 模型

1 基本概念

1.1 定义

隐 Markov 模型 (Hidden Markov Model, HMM)

这是一个关于时间序列的概率模型, 描述由一个隐藏的 Markov 链随机生成不可观测的状态随机序列, 再由各个状态生成一个观测从而产生观测随机序列的过程. 隐藏 Markov 链随机生成了状态序列; 每个状态产生的一个观测生成的随机序列为观测序列.

设

因此隐 Markov 模型由 λ=(A,B,π) 决定, 其中 π,A 决定状态序列, B 决定观测序列.

隐 Markov 模型的两个基本假设:

  1. 齐次 Markov 性假设: P(it|it−1,ot−1,⋯,i1,o1)=P(it|it−1),∀t.
  2. 观测独立性假设: P(ot|i1≤t′≤T,ot′≠t)=P(ot|it).

1.2 观测序列的生成过程

观测序列的生成

输入 隐 Markov 模型 λ=(A,B,π), 观测序列长度 T
输出 观测序列 O=(o1,⋯,oT)

  1. 按 π 分布生成 i1, t=1.
  2. 按 it 的观测概率分布 bit(k) 生成 ot.
  3. 按 it 的状态转移概率分布 {aitit+1} 生成 it+1.
  4. 令 t=t+1; 若 t<T, 转到 2; 否则终止.

1.3 个基本问题

2 概率计算算法

2.1 直接计算

直接计算各个概率: 对 I=(i1,⋯,iT), O=(o1,⋯,oT), P(I|λ)=πi1ai1i2⋯aiT−1iT, P(O|I,λ)=bi1(o1)⋯biT(oT), 从而 P(O,I|λ)=P(O|I,λ)P(I|λ), 最后对 I 求和: P(O|λ)=∑IP(O|I,λ)P(I|λ)=∑i1,⋯,iTπi1∏j=1T−1bij(oj)aijij+1⋅biT(oT). 这个公式是 O(TNT) 阶的, 计算量过大.

2.2 前向算法

前向概率

给定模型 λ, 定义前向概率 (2.1)αt(i)=P(o1,⋯,ot,it=qi|λ). (也即给定模型下, t 时刻的观测序列和状态的概率)

观测序列概率的前向算法

输入 λ,O
输出 P(O|λ)

  1. 初值 α1(i)=πibi(o1),1≤i≤N.
  2. 递推: αt+1(i)=[∑j=1Nαt(j)aji]bi(ot+1),1≤i≤N.
  3. 终止: P(O|λ)=∑i=1NαT(i).

关于第二步, 根据定义 ∑j=1Nαt(j)aij=P(o1,⋯,ot,it+1=qi|λ), 然后再乘上 bi(ot+1) 就是 αt+1(i). 第三步由定义容易得到.
Pasted image 20250604220520.png|250

在每个时刻 t=1,⋯,T−1, 都计算 αt+1(i) 的 N 个值, 可以直接利用之前的 αt(j), 避免重复计算, 这样计算量从 O(TNT) 下降到了 O(N2T).

2.3 后向算法

后向概率

定义 (2.2)βt(i)=P(ot+1,⋯,oT|it=qi,λ).

观测序列概率的后向算法

输入 λ,O
输出 P(O|λ)

  1. βT(i)=1
  2. 对 t=T−1,⋯,1: βt(i)=∑j=1Naijbj(ot+1)βt+1(j),1≤i≤N.
  3. P(O|λ)=∑i=1Nπibi(o1)β1(i).

Pasted image 20250604222653.png|250
根据前向和后向概率, 可以统一 P(O|λ)=∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(j),1≤t≤T−1.

2.4 一些概率与期望的计算

  1. 记 γt(i)=P(it=qi|O,λ). 事实上 γt(i)=P(it=qi,O|λ)P(O|λ)=αt(i)βt(i)P(O|λ)=αt(i)βt(i)∑j=1Nαt(j)βt(j).

  2. 记 ξt(i,j)=P(it=qi,it+1=qj,O|λ)P(O|λ), 则 ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(j).

  3. 基于 γt(i),ξt(i,j) 得到的期望值:

    1. O 下 i 出现的期望: ∑t=1Tγt(i).
    2. O 下 i 转移的期望: ∑t=1T−1γt(i).
    3. O 下 i 转移到 j 的期望: ∑t=1T−1ξt(i,j).

3 学习算法

3.1 监督学习算法

假设知道 S 个长度相同的序列: {(O1,I1),⋯,(OS,IS)}. 可以用极大似然估计来估计模型的参数.

  1. 转移概率 aij:
    假设 t 下状态为 i, t+1 下状态为 j 的频数为 Aij, 则 a^ij=Aij∑j=1NAij,1≤i,j≤N.
  2. 观测概率 bj(k):
    设状态为 j 且观测为 k 的频数为 Bjk, 则 b^j(k)=Bjk∑k=1MBjk,1≤j≤N,1≤k≤M.
  3. π^i: 初始状态下 qi 的频率.

3.2 Baum-Welch 算法

人工标注数据的代价很高, 因此采用无监督学习的算法.
现在只给定 {O1,⋯,OS}. 将观测序列看作 O, 状态序列看作不可观测的 I, 则隐 Markov 模型为 P(O|λ)=∑IP(O|I,λ)P(I|λ). 可以用 EM算法 实现.

  1. E 步: 计算 Q(λ,λ―): Q(λ,λ―)=∑Ilog⁡P(O,I|λ)P(O,I|λ―). 带入 P(O,I|λ)=πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT), 有Q(λ,λ―)=∑Ilog⁡πi1P(O,I|λ―)+∑I(∑t=1T−1log⁡aitit+1)P(O,I|λ―)+∑I(∑t=1Tlog⁡bit(ot))P(O,I|λ―).
  2. M 步: 极大化 Q(λ,λ―), 求参数 A,B,π. 注意到 π,A,B 分别出现在上面的三项中, 因此可以分别极大化. 对第一项, 结合 ∑i=1Nπi=1, 写出 Lagrange 函数 ∑i=1Nlog⁡πiP(O,i1=i|λ―)+γ(∑i=1Nπi−1). 对 πi 求偏导让结果为 0, 得 πi=P(O,i1=i|λ―)P(O|λ―).
    类似地, 第二项可以写为 ∑i=1N∑j=1N∑t=1T−1log⁡aijP(O,it=i,it+1=j|λ―). 结合约束条件 ∑j=1Naij=1, 类似得 aij=∑t=1T−1P(O,it=i,it+1=j|λ―)∑t=1T−1P(O,it=i|λ―).
    最后对第三项 ∑j=1N∑t=1Tlog⁡bj(ot)P(O,it=j|λ―), 结合 ∑k=1Mbj(k)=1, 注意要添加限定条件 ot=vk, 则 bj(k)=∑t=1TP(O,it=j|λ―)1{ot=vk}∑t=1TP(O,it=j|λ―).
    结合 gamma 和 xi, 有 (3.1)aij=∑t=1T−1ξt(i,j)∑t=1T−1γt(i),bj(k)=∑t=1,ot=vkTγt(j)∑t=1Tγt(j),πi=γ1(i).
Baum-Welch 算法

输入 O=(o1,⋯,oT)
输出 λ=(π,A,B)

  1. 初始化: n=0, 选取 aij(0),bj(k)(0),πi(0), 得到模型 λ(0)=(A(0),B(0),π(0)).
  2. 递推: 见 (3.1).
  3. 终止: λ(n+1)=(A(n+1),B(n+1),π(n+1)).

预测算法


  1. 注意这里同时出现了两个 i 一个是下标一个是状态序列 ↩︎